package wenjun.du.androidart.remoteview

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_remote_views.*
import wenjun.du.androidart.R

/**
 * 远程的控件：可以理解成展示在远程服务中的界面 比如：通知、桌面小控件
 *
 * 主要展示的是通知和桌面小控件的使用
 *
 * 构造方法传入包名和资源id即可
 *
 * notification:setCustomContentView  设置自定义的RemoteView 用于自定义展示布局
 *
 *
 *  桌面小部件的使用：AppWidgetProvider
 *
 *  PendingIntent:创建延迟意图 用于打开activity、service和broadCast
 *
 *
 *  源码分析：
 *  1.通知栏和桌面小控件都是跨进程活动 分别对应于：(notificationManager)NotificationManagerService 和 (AppWidgetManager)AppWidgetService
 *  2. 更新信息是通过RemoteViews提供的set方法 将动作封装成action对象，保存到一个List中，当RemoteViews加载完成的时候，通过遍历这个list，使用反射或者设置回调的方式
 *  更新界面或者响应动作
 * AppWidgetHostView中的远程调用； RemoteViews.apply(Context context, ViewGroup parent, OnClickHandler handler)
 *
 *
 * 重点还是binder跨进程 更新界面和响应动作
 *
 * */

class RemoteViewsActivity : AppCompatActivity() {
    companion object {
        private const val TAG = "RemoteViewsActivity"
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_remote_views)

        remote_view_button.setOnClickListener {
            Toast.makeText(this, " remote view 源码解析 ", Toast.LENGTH_SHORT).show()
        }
    }

    override fun onStart() {
        super.onStart()
    }


}